package utils

// 实现邮件发送功能，供handler模块中的advice业务逻辑调用


import (
	"github.com/spf13/viper"
	"gopkg.in/gomail.v2"
	"os"
	"strconv"


)

func SendMail(mailTo []string, subject string, body string) error {
	//定义邮箱服务器连接信息，如果是网易邮箱 pass填密码，qq邮箱填授权码

	//mailConn := map[string]string{
	//  "user": "xxx@163.com",
	//  "pass": "your password",
	//  "host": "smtp.163.com",
	//  "port": "465",
	//}

	// new viper 读取email.yaml文件信息
	path, err := os.Getwd()
	if err != nil {
		panic(err)
	}
	email := viper.New()
	email.AddConfigPath(path)  //设置读取的文件路径
	email.SetConfigName("email") //设置读取的文件名
	email.SetConfigType("yaml") //设置文件的类型
	//尝试进行配置读取
	if err := email.ReadInConfig(); err != nil {
		panic(err)
	}

	mailConn := map[string]string{
		"user": email.GetString("email.user"),
		"pass": email.GetString("email.pass"),
		"host": email.GetString("email.host"),
		"port": email.GetString("email.port"),
	}

	port, _ := strconv.Atoi(mailConn["port"]) //转换端口类型为int

	m := gomail.NewMessage()

	m.SetHeader("From",  m.FormatAddress(mailConn["user"], "LoveService")) //这种方式可以添加别名，即“XX官方”
	//说明：如果是用网易邮箱账号发送，以下方法别名可以是中文，如果是qq企业邮箱，以下方法用中文别名，会报错，需要用上面此方法转码
	//m.SetHeader("From", "FB Sample"+"<"+mailConn["user"]+">") //这种方式可以添加别名，即“FB Sample”， 也可以直接用<code>m.SetHeader("From",mailConn["user"])</code> 读者可以自行实验下效果
	//m.SetHeader("From", mailConn["user"])
	m.SetHeader("To", mailTo...)    //发送给多个用户
	m.SetHeader("Subject", subject) //设置邮件主题
	m.SetBody("text/html", body)    //设置邮件正文

	d := gomail.NewDialer(mailConn["host"], port, mailConn["user"], mailConn["pass"])

	err1 := d.DialAndSend(m)
	return err1

}
